import Vue from 'vue'
import axios from "axios";
import { VueAxios } from './axios'
import store from '@/store'
import {Modal, notification} from 'ant-design-vue'
import {ACCESS_TOKEN,TENANT_ID} from "@/store/mutationTypes"

let apiBaseUrl = window._CONFIG['domianURL'] || '/gecba';

const service = axios.create({
    baseURL: apiBaseUrl,
    timeout: 9000,
});

const installer = {
    vm: {},
    install (Vue, router = {}) {
        Vue.use(VueAxios, router, service)
    }
}

service.interceptors.request.use(config => {
    const token = Vue.ls.get(ACCESS_TOKEN);
    if(token) {
        config.headers[ 'X-Access-Token' ] = token;
    }

    let tenantId = Vue.ls.get(TENANT_ID);
    if(!tenantId){
        tenantId = 0;
    }
    config.headers[ 'tenant-id' ] = tenantId;

    if(config.method==='get'){
        if(config.url.indexOf("sys/dict/getDictItems")<0){
            config.params = {
                _t: Date.parse(new Date())/1000,
                ...config.params
            }
        }
    }

    return config;
},(error) =>{
    return Promise.reject(error);
});


const err = (error) => {
    if(error.response){
        let data = error.response.data;
        const token = Vue.ls.get(ACCESS_TOKEN);
        console.log("------异常响应------",token)
        console.log("------异常响应------",error.response.status)
        switch (error.response.status){
            case 403:
                notification.error({ message: '系统提示', description: '拒绝访问',duration: 4})
                break;
            case 500:
                console.log("------error.response------",error.response);
                let type=error.response.request.responseType;

                if(token && data.message.includes('Token失效')){
                    Modal.error({
                        title: '登录已过期',
                        content: '很抱歉，登录已过期，请重新登录',
                        okText: '重新登录',
                        mask: false,
                        onOk: () => {
                            store.dispatch('Logout').then(() => {
                                Vue.ls.remove(ACCESS_TOKEN)
                                try {
                                    let path = window.document.location.pathname
                                    console.log("location pathname -> "+path)
                                    if(path!="/" && path.indexOf('/user/login')==-1){
                                        window.location.reload()
                                    }
                                }catch (e) {
                                    window.location.reload()
                                }
                            })
                        }
                    })
                }
                break;
            case 404:
                notification.error({ message: '系统提示', description:'很抱歉，资源未找到!',duration: 4})
                break
            case 504:
                notification.error({ message: '系统提示', description: '网络超时'})
                break
            case 401:
                notification.error({ message: '系统提示', description:'未授权，请重新登录',duration: 4})
                if (token) {
                    store.dispatch('Logout').then(() => {
                        setTimeout(() => {
                            window.location.reload()
                        }, 1500)
                    })
                }
                break;
            default:
                notification.error({
                    message: '系统提示',
                    description: data.message,
                    duration: 4
                })
                break;
        }
    }

    return Promise.reject(error);
}

service.interceptors.response.use((response)=>{
    return response.data
}, err);




export {
    installer as VueAxios,
    service as axios
}


